package com.example.dao;

import com.example.entity.NxSystemFileInfo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

/**
 * 系统文件存储信息数据访问层接口
 * 主要职责：
 * 1. 管理文件存储元数据（哈希值、存储路径等）
 * 2. 支持文件去重校验
 * 3. 提供文件检索能力
 */
@Repository
public interface NxSystemFileInfoDao extends Mapper<NxSystemFileInfo> {

    /**
     * 条件查询系统文件存储信息（支持原始文件名模糊搜索）
     *
     * @param name 查询条件：
     *             - 模糊匹配原始文件名（originName字段，LIKE %value% 查询）
     *             - 传 "all" 时查询全部记录
     * @return {@link List<NxSystemFileInfo>} 文件存储信息实体列表（包含哈希值等元数据）
     *
     * @implNote 对应XML中的<select id="findByName">实现，默认按ID升序排列
     */
    List<NxSystemFileInfo> findByName(@Param("name") String name);

    /**
     * 通过存储文件名精确查询文件信息
     *
     * @param name 存储文件名（fileName字段，精确匹配）
     * @return {@link NxSystemFileInfo} 文件存储信息实体（包含完整存储路径等信息）
     *
     * @implNote 对应XML中的<select id="findByFileName">实现，用于通过文件系统路径访问文件
     */
    NxSystemFileInfo findByFileName(@Param("name") String name);

    /**
     * 通过文件哈希值查询存储信息（用于去重校验）
     *
     * @param fileHash 文件哈希值
     * @return {@link NxSystemFileInfo} 文件存储信息实体（包含哈希值匹配的记录）
     *
     * @implNote 对应XML中的<select id="selectByHash">实现，用于验证文件是否已存在系统
     */
    NxSystemFileInfo selectByHash(String fileHash);
}